﻿
namespace FastFood.Windows.Forms.Administracion.Otros
{
    using System;
    using System.Collections.Generic;
    using System.Data.Linq;
    using System.Linq;
    using System.Windows.Forms;
    using FastFood.Business.Entities;
    using FastFood.Business.Logic;
    using FastFood.Windows.Helpers;

    public partial class CwfClientes : UserControl
    {
        public EstadoActual estadoActual;

        public CwfClientes()
        {
            if (!DesignMode)
            {
                InitializeComponent();
            }
        }

        private void CwfEmpleados_Load(object sender, EventArgs e)
        {
            if (!DesignMode)
            {
                this.TsMenu.FormularioID = Convert.ToByte(this.Tag);
                this.TsMenu.LoadPermisos();
                ClearControls();
                InitialLoad();
                EnabledControls(true);
                EnabledButtons(true);
            }
        }

        private void Focus_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(Keys.Enter))
            {
                e.Handled = true;
                SendKeys.Send("{TAB}");
            }
        }

        private void TsbNuevo_Click(object sender, EventArgs e)
        {
            this.estadoActual = EstadoActual.Nuevo;
            EnabledControls(false);
            EnabledButtons(false);
            ClearControls();
            this.txtDNI.Focus();
            this.clientesBindingSource.AddNew();
        }

        private void TsbEditar_Click(object sender, EventArgs e)
        {
            this.estadoActual = EstadoActual.Editar;
            EnabledControls(false);
            EnabledButtons(false);
            this.txtDNI.Focus();
        }

        private void TsbEliminar_Click(object sender, EventArgs e)
        {
            if (Mensaje.ShowMessageConfirm(this.ParentForm, Constantes.Titulo, "¿Desea eliminar el Registro?") == DialogResult.Yes)
            {
                this.estadoActual = EstadoActual.Eliminar;
                SaveData();
                this.estadoActual = EstadoActual.Normal;
                if (this.clientesBindingSource.Current != null)
                {
                    LoadClientes(this.clientesBindingSource.Current as Clientes);
                }
            }
        }

        private void TsbGuardar_Click(object sender, EventArgs e)
        {
            if (ValidateData())
            {
                if (SaveData())
                {
                    this.estadoActual = EstadoActual.Normal;
                    if (this.clientesBindingSource.Current != null)
                    {
                        LoadClientes(this.clientesBindingSource.Current as Clientes);
                    }
                    EnabledControls(true);
                    EnabledButtons(true);
                    this.dgvClientes.Focus();
                }
            }
        }

        private void TsbCancelar_Click(object sender, EventArgs e)
        {
            if (this.estadoActual == EstadoActual.Nuevo)
            {
                ClearControls();
            }
            this.estadoActual = EstadoActual.Normal;
            EnabledControls(true);
            EnabledButtons(true);
            this.clientesBindingSource.CancelEdit();
            this.dgvClientes.Focus();
        }

        private void dgvPersonas_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1 && e.ColumnIndex != -1)
            {
                if (this.estadoActual == EstadoActual.Normal)
                    LoadClientes(this.clientesBindingSource.Current as Clientes);
            }
        }

        private void dgvPersonas_KeyDown(object sender, KeyEventArgs e)
        {
            if (this.estadoActual != EstadoActual.Normal) return;
            if (e.KeyCode == Keys.Delete)
            {
                if (this.dgvClientes.SelectedRows.Count != 0)
                {
                    if (Mensaje.ShowMessageConfirm(this.ParentForm, Constantes.Titulo, "¿Desea eliminar el Registro?") == DialogResult.No)
                    {
                        e.Handled = true;
                    }
                    else
                    {
                        this.estadoActual = EstadoActual.Eliminar;
                        SaveData();
                        this.estadoActual = EstadoActual.Normal;
                        if (this.clientesBindingSource.Current != null)
                        {
                            LoadClientes(this.clientesBindingSource.Current as Clientes);
                        }
                    }
                }
            }
        }

        private void txtBuscar_TextChanged(object sender, EventArgs e)
        {
            btnBuscar_Click(sender, new EventArgs());
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            if (this.cmbTipoBusqueda.SelectedIndex != -1)
            {
                try
                {
                    switch (this.cmbTipoBusqueda.SelectedIndex)
                    {
                        case 0:
                            this.clientesBindingSource.DataSource = new ClientesManager().ListarByRUC(this.txtBuscar.Text);
                            break;
                        case 1:
                            this.clientesBindingSource.DataSource = new ClientesManager().ListarByDNI(this.txtBuscar.Text);
                            break;
                        case 2:
                            this.clientesBindingSource.DataSource = new ClientesManager().ListarByApellidos(this.txtBuscar.Text);
                            break;
                        case 3:
                            this.clientesBindingSource.DataSource = new ClientesManager().ListarByNombres(this.txtBuscar.Text);
                            break;
                        default:
                            return;
                    }
                    this.clientesBindingNavigator.BindingSource = this.clientesBindingSource;
                }
                catch (Exception ex)
                {
                    Mensaje.ShowMessageAlert(this.ParentForm, Constantes.Titulo, ex.Message);
                }
            }
        }

        private void InitialLoad()
        {
            ClientesManager clienteCn = new ClientesManager();
            try
            {
                this.clientesBindingSource.DataSource = clienteCn.Listar();
                this.clientesBindingNavigator.BindingSource = this.clientesBindingSource;
            }
            catch (Exception ex)
            {
                Mensaje.ShowMessageAlert(this.ParentForm, Constantes.Titulo, ex.Message);
            }
        }

        private void LoadClientes(Clientes cliente)
        {
            this.lblClienteID.Text = cliente.clienteID.ToString();
            this.txtNombre.Text = cliente.nombres;
            this.txtApellidos.Text = cliente.apellidos;
            this.txtDNI.Text = cliente.DNI;
            this.txtRUC.Text = cliente.RUC;
            this.txtDireccion.Text = cliente.Direccion;             
        }

        private bool SaveData()
        {
            bool result = false;
            ClientesManager clienteCn = new ClientesManager();
            try
            {
                switch (this.estadoActual)
                {
                    case EstadoActual.Nuevo:
                        clienteCn.Agregar(GetClientes());
                        break;
                    case EstadoActual.Editar:
                        clienteCn.Modificar(GetClientes());
                        break;
                    case EstadoActual.Eliminar:
                        clienteCn.Eliminar(Convert.ToInt16(this.lblClienteID.Text));
                        this.clientesBindingSource.RemoveCurrent();
                        break;
                }

                this.clientesBindingSource.EndEdit();
                result = true;
                InitialLoad();
            }
            catch (Exception ex)
            {
                Mensaje.ShowMessageAlert(this.ParentForm, Constantes.Titulo, ex.Message);
            }
            return result;
        }

        private Clientes GetClientes()
        {
            Clientes cliente = new Clientes
            {
                clienteID = Convert.ToInt16(this.lblClienteID.Text),
                nombres = this.txtNombre.Text,
                apellidos = this.txtApellidos.Text,
                DNI = this.txtDNI.Text,
                RUC = this.txtRUC.Text,
                Direccion = this.txtDireccion.Text
            };
            return cliente;
        }

        private bool ValidateData()
        {
            bool result = true;

            if (string.IsNullOrEmpty(this.txtNombre.Text))
            {
                this.errValidator.SetError(this.txtNombre, "Ingresar Nombres.");
                result = false;
            }
            else
            {
                this.errValidator.SetError(this.txtNombre, string.Empty);
            }

            if (string.IsNullOrEmpty(this.txtApellidos.Text))
            {
                this.errValidator.SetError(this.txtApellidos, "Ingresar Apellidos.");
                result = false;
            }
            else
            {
                this.errValidator.SetError(this.txtApellidos, string.Empty);
            }

            return result;
        }

        private void EnabledControls(bool valor)
        {
            this.gbxInformacion.Enabled = !valor;
            this.clientesBindingNavigator.Enabled = valor;
            this.dgvClientes.Enabled = valor;
        }

        private void EnabledButtons(bool valor)
        {
            this.TsMenu.EnabledNuevo = valor;
            this.TsMenu.EnabledEditar = valor;
            this.TsMenu.EnabledEliminar = valor;

            if (this.estadoActual == EstadoActual.Nuevo ||
                this.estadoActual == EstadoActual.Editar)
            {
                this.TsMenu.EnabledGuardar = true;
                this.TsMenu.EnabledCancelar = true;
                this.dgvClientes.Enabled = false;
            }
            else
            {
                this.TsMenu.EnabledGuardar = false;
                this.TsMenu.EnabledCancelar = false;
                this.dgvClientes.Enabled = true;
            }
        }

        private void ClearControls()
        {
            this.lblClienteID.Text = "0";
            this.txtNombre.Text = string.Empty;
            this.txtApellidos.Text = string.Empty;
            this.txtDNI.Text = string.Empty;
            this.txtRUC.Text = string.Empty;
            this.txtDireccion.Text = string.Empty;
            this.errValidator.Clear();
        }
    }
}
